package com.vue3.blog.common.util;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.vue3.blog.common.resp.PageVO;

import java.util.List;

/**
 * @author Mr.小朱同学
 * @version 1.0.0
 * @date 2025/6/10 11:46
 * @description 自定义分页工具类
 */
public class PageUtil2 {

    /**
     * 开启分页
     */
    public static <T> PageVO<T> startPage() {
        int pageNum;
        int pageSize;
        PageVO<T> pageVo = new PageVO<>();
        pageNum = Integer.parseInt(StrUtil2.nvl(RequestUtil2.getParam("pageNum"), "1"));
        pageSize = Integer.parseInt(StrUtil2.nvl(RequestUtil2.getParam("pageSize"), "10"));
        // 开启分页
        PageHelper.startPage(pageNum, pageSize);
        return pageVo;
    }

    /**
     * 结束分页
     *
     * @param target 二次处理结果数据集
     */
    public static <T> PageVO<T> endPage(List<T> target) {
        return endPage(target, target);
    }

    /**
     * 结束分页
     *
     * @param source 分页之后的数据集
     * @param target 二次处理结果数据集
     */
    public static <S, T> PageVO<T> endPage(List<S> source, List<T> target) {
        // 封装查询结果
        PageInfo<S> pageInfo = new PageInfo<>(source);
        // 解决分页之后，二次处理数据，导致分页不正确问题
        PageVO<T> pageVo = new PageVO<>();
        pageVo.setRecord(target);
        pageVo.setTotal(pageInfo.getTotal());
        pageVo.setPages(pageInfo.getPages());
        pageVo.setPageNum(pageInfo.getPageNum());
        pageVo.setPageSize(pageInfo.getPageSize());
        // 清除分页参数对象
        PageHelper.clearPage();
        return pageVo;
    }

}